package ACwing.P2DataSturcture.DisjointSetUnion;

import java.io.*;

/**
 * @Date : 2023-03-14
 * @Description:AcWing 837. 连通块中点的数量
 */
public class p837 {
    static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
    static StreamTokenizer st=new StreamTokenizer(br);
    static int m,n;
    static int N=100010;
    static int[] p=new int[N],size=new int[N]; //size用来存每个集合中数的个数
    public static void main(String[] args) throws IOException {

        String[] split = br.readLine().split("\\s+");
        n=Integer.parseInt(split[0]);
        m=Integer.parseInt(split[1]);
        for (int i = 0; i < n; i++) {
            p[i]=i;
            size[i]=1;// 一开始每个数是一个集合，各自都是个数为1；
        }
        while(m--!=0){
            String readLine = br.readLine();
            String[] strs = readLine.split("\\s+");
            if(strs[0].equals("C")){
                int a=Integer.parseInt(strs[1]);
                int b=Integer.parseInt(strs[2]);
                if(query(a) == query(b)) continue; // 这里需要特判一下，如果两个数是同个集合中的数，就结束；
                else{
                size[query(b)]+=size[query(a)];
                    // 只有两个数的根节点，也就是祖先的size值才是有用的，
                    //两个集合中的赋值给另一个祖先的，即赋值给另一个祖先的这个祖先就是合并之后的两个集合的祖先
                    //  b的size[]  +  =a的size[] 因为b是合并之后的新祖先，所以要让b加上被合并的a
                p[query(a)]=query(b);//合并操作，p[a]的祖先指向b，说明b是合并之后的祖先
                }
            }
            else if(strs[0].equals("Q1")){
                int a=Integer.parseInt(strs[1]);
                int b=Integer.parseInt(strs[2]);
                if(query(a)==query(b))
                    bw.write("Yes\n");
                else  bw.write("No\n");
            }else{
                int a=Integer.parseInt(strs[1]);
                //只有根节点的size才是有用的,则通过find(a)找到他的根节点然后输出根节点的size;
               bw.write(String.valueOf(size[query(a)])+"\n");
            }

        }
        bw.flush();
        bw.close();
    }
    static int query(int x){
            if(p[x]!=x) p[x]=query(p[x]);
            return p[x];
    }
}
